package com.kapcb.mvc.listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.web.context.support.ServletRequestHandledEvent;

/**
 * <a>Title: ServletRequestHandledEventListener </a>
 * <a>Author: cb <a>
 * <a>Description: HTTP 请求被处理完成后 Spring MVC 发布的处理完成事件处理 <a>
 *
 * @author cb
 * @version 1.0
 * @date 2024/4/22 6:41 PM
 * @since 1.0
 */
@Slf4j
public class ServletRequestHandledEventListener implements ApplicationListener<ServletRequestHandledEvent> {

    /**
     * 当 HTTP 请求被业务服务处理完成后，Spring 会发 RequestHandledEvent 事件
     * 只能使用于 DispatcherServlet 的 WEB 应用。
     * 在使用 Spring 作为前端的 MVC 控制器时，当 Spring 处理用户请求结束后，系统会自动触发该事件
     *
     * @param event
     */
    @Override
    public void onApplicationEvent(ServletRequestHandledEvent event) {
        log.info("请求相关信息==={}", event.getDescription());
        log.info("访问路径==={}", event.getRequestUrl());
        log.info("请求系统响应花费时间==={}", event.getProcessingTimeMillis());
        log.info("请求发生时间==={}", event.getTimestamp());
        log.info("请求失败原因异常==={}", event.getFailureCause());
        log.info("请求响应HTTP状态值==={}", event.getStatusCode());
    }

}
